var roleStore;
var sroleStore;
var privilege = [];
var privilege_temp = [];
var resourceGrid;
var nodeId;
/**
 * 删除字符串数组中指定位置的字符串
 * @param {} arr 字符串数组
 * @param {} d 删除位置(第几个)
 * @return {} 删除后的字符串
 */
function arr_del_add(arr, d){
	if(arr=="undefined"||arr==null)return null;
    return arr.slice(0,d-1).concat(arr.slice(d));
}
/**
 * 删除字符串数组中指定的字符串
 * @param {} arr 字符串数组
 * @param {} el 要删除的字符串
 * @return {} 删除后的字符串
 */
function arr_del_elem(arr, el){
	if(arr=="undefined"||arr==null)return null;
	var add;
	for (var i = 0; i < arr.length; i++) {
		if(el==arr[i])
			add = i+1;
	}
	return arr.slice(0,add-1).concat(arr.slice(add));
}
/**
 * 初始化checkbox
 * @param {} arrays 希望选择的checkbox里面存的值,根据值去确定是否选中
 */
function initCheckBox(arrays){
//	alert("debug:"+arrays);
	if(arrays=="undefined"||arrays==null)return;
	var hasLength = sroleStore.getTotalCount();
  	resourceGrid.getSelectionModel().selectAll ();
  	var sel_temp = resourceGrid.getSelectionModel().getSelections();
  	resourceGrid.getSelectionModel().clearSelections();
  	for (var i = 0; i < hasLength; i++) {
  		var id = sel_temp[i].data.id;
  		for (var i2 = 0; i2 < arrays.length; i2++) {
  			if(arrays[i2]==id){
  				resourceGrid.getSelectionModel().selectRow(i, true);
  				break;
  			}
  		}
  	}
}

/**
 * 处理上一次选择的数据
 */
function lastSelectDo(){
	//将前一次列表中的数据id push到数组中,先要获得所有的id,把选择了的push进去,同时要删除已经没有选的记录
  		var sel = resourceGrid.getSelectionModel().getSelections();
		var length = sel.length;
//		alert("debug:lastSelectDo.length="+length);
//		alert("debug:privilege="+privilege);
		for(var i=0; i<length; i++){
//			alert("debug:i="+i+"\nlength="+length)
			var id = sel[i].data.id;
			//得到选择了的id,插入
			var flag = 0;//里面是否有这个值,重复标记
			for (var j = 0; j < privilege.length; j++) {
				if(id==privilege[j]){
					flag=1;
					break;
				}
			}
//			alert("debug:这个id="+id+"是否重复?"+flag);
			if(flag==0){//如果没有重复
//				alert("没有重复");
				privilege.push(id);//插入方法
			}
			//把放在privilege_temp中本次已经选择了的删除
//			alert("删除前="+privilege_temp.length);
			if(privilege_temp!="undefined"&&privilege_temp!=null)
				privilege_temp = arr_del_elem(privilege_temp, id);
//				alert("删除后="+privilege_temp.length);
		}
		for (var i = 0; i < privilege_temp.length; i++) {
			privilege = arr_del_elem(privilege, privilege_temp[i]);
		}
}

function getIdToTemp(){
	//此段代码是为了找到所有的id存起来,存放到privilege_temp中-开始
		privilege_temp.splice(0,privilege_temp.length);
  		var hasLength = sroleStore.getTotalCount();
  		resourceGrid.getSelectionModel().selectAll ();
  		var sel_temp = resourceGrid.getSelectionModel().getSelections();
  		for (var i = 0; i < hasLength; i++) {
  			var id = sel_temp[i].data.id;
  			//alert("id="+id)
  			privilege_temp.push(id);
  		}
  		resourceGrid.getSelectionModel().clearSelections();
  		//此段代码是为了找到所有的id存起来,存放到privilege_temp中-结束
}
function reloadResource(sid){
	sroleStore.on('beforeload' , function(){
		//设置 点击树时 刷新列表所用的 参数
  		sroleStore.baseParams = {id:sid};
  		lastSelectDo();
	});
	
	sroleStore.reload();
	
	sroleStore.on('load' , function(){
		//找到所有的id存起来,存放到privilege_temp中
		getIdToTemp();
  		//初始化checkbox
  		initCheckBox(privilege);
	});
}
/**
 * 判断角色名是否重复的函数
 * @param {} roleName 角色名
 * @return {Boolean} 是否重复 true重复;false不重复
 */
function fnIsRoleNameDuplicate(name){
	var ret = false;
	
	var conn = Ext.lib.Ajax.getConnectionObject().conn;
	conn.open("GET", 'roleManagementAction!checkRoleNameDuplicate.action',false);
	conn.send("roleName="+name);
	var responseTextVale = Ext.util.JSON.decode(conn.responseText);
	ret = responseTextVale.roleNameDuplicate;
	
	return ret;
}
Ext.onReady(function() {
			Ext.QuickTips.init();
			var sm = new Ext.grid.CheckboxSelectionModel();
			var resource_sm = new Ext.grid.CheckboxSelectionModel();
			// 数据
			roleStore = new Ext.data.Store({
						url : 'roleManagementAction!query.action',
						reader : new Ext.data.JsonReader({
									totalProperty : 'result.totalCount',
									root : 'result.result',
									id : 'roleId'
								}, [{
											name : 'roleId',
											mapping : 'id'
										}, {
											name : 'roleName',
											mapping : 'name'
										}, {
											name : 'isValid',
											mapping : 'disabled'
										}, {
											name : 'roleDesc',
											mapping : 'description'
										}])
					});
			// 结果列
			var cm = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), sm,
					{
						header : "角色名",
						dataIndex : 'roleName',
						sortable : true,
						width: '20',
						renderer : r_roleNameSubstring
					}, {
						header : "是否启用",
						dataIndex : 'isValid',
						sortable : true,
						renderer : function(value) {
							if (value == 1) {
								return "<span style='color:red;font-weight:bold;'>冻结</span>";
							} else if (value == 0) {
								return "<span style='color:green;font-weight:bold;'>启用</span>";
							}
						}
					}, {
						header : "角色描述",
						dataIndex : 'roleDesc',
						sortable : true
					}]);

			// 点击删除按钮
			var delRoleAction = new Ext.Action({
				text : '删除角色',
				tooltip : '删除角色',
				iconCls : 'remove',
				handler : function() {
					var recordLength = roleGrid.getSelectionModel()
							.getSelections().length;
					if (recordLength > 0) {
						Ext.MessageBox.confirm('确认删除', '你确认要删除' + recordLength
										+ '条数据吗?', function(btn) {
									if (btn == "yes") {
										var deleteRoleId = [];
										var rs = roleGrid.getSelectionModel()
												.getSelections();
										for (var i = 0; i < recordLength; i++) {
											var roleId = rs[i].data.roleId;
											deleteRoleId.push(roleId);
											roleStore.remove(roleStore
													.getById(roleId));
										}
										Ext.Ajax.request({
											url : 'roleManagementAction!deleteRoleByRolesIds.action?roleIds='
													+ Ext.encode(deleteRoleId),
											success : function(response, options) {
											roleStore.load();
											}
										});
									}
								});
					} else {
						Ext.Msg.alert('提示', '请选择要删除的数据项!');
					}
				}
			});
			// 点击查询按钮
			var queryRoleAction = new Ext.Action({
						text : '查询',
						tooltip : '查询',
						iconCls : 'search',
						handler : function() {
							roleStore.on('beforeload' , function(){
      							roleStore.baseParams = {
      								queryKey:queryKeyField.getValue()
								}
							});
							roleStore.load();
						}
					});

			// 点击编辑角色按钮
			var editRoleAction = new Ext.Action({
				text : '编辑角色',
				tooltip : '编辑角色',
				iconCls : 'option',
				handler : function() {
					var recordLength = roleGrid.getSelectionModel()
							.getSelections().length;
					if (recordLength < 1) {
						Ext.Msg.alert('警告', '请选择需要修改的角色');
						return;
					}
					if (recordLength > 1) {
						Ext.Msg.alert('警告', '只能选择一个角色进行修改');
						return;
					}

					Ext.Ajax.request({
						url : "roleManagementAction!retrieveEntity.action?role.id="
								+ roleGrid.getSelectionModel().getSelections()[0].data.roleId,
						method : "post",
						success : function(response, options) {
							var responseTextVale = Ext.util.JSON.decode(response.responseText);
							privilege=Ext.util.JSON.decode(responseTextVale.privilegeIds);
//							alert("debug:一共有"+privilege+"个选择.");
							document.getElementById("role_id").value = responseTextVale.role.id;
							document.getElementById("role_name").value = responseTextVale.role.name.substring(5,responseTextVale.role.name.length);
							document.getElementById("role_name").readOnly = true;
							document.getElementById("role_disabled").value = responseTextVale.role.disabled;
							document.getElementById("role_description").value = responseTextVale.role.description==null?"":responseTextVale.role.description;
						}
					});

					rolewindow().show();
				}
			})

			// 点击新增角色按钮
			var addRoleAction = new Ext.Action({
						text : '新增角色',
						tooltip : '新增角色',
						iconCls : 'add',
						handler : function() {
							if(privilege!=null)
								privilege.splice(0,privilege.length);
							rolewindow().show();
							Ext.getCmp('addRolePanelForm').form.findField('role_disabled').setValue("0");
						}
					});
			var queryKeyField = new Ext.form.TextField({ 
					emptyText : '需要查询的角色名称，支持模糊查询',
					fieldLabel: '角色名称',
					labelWidth: 100,
					name : 'queryRoleName',
					id : 'queryRoleName',
					width:200
				});

			// 表格
			var roleGrid = new Ext.grid.GridPanel({
						
						height : document.body.clientHeight,
						id : 'taxesGrid',
						tbar : [new Ext.form.Label({
						text : '角色名称:'
					}),
					' ',
					queryKeyField, queryRoleAction, '-', addRoleAction, '-',
								delRoleAction, '-', editRoleAction],
						sm : sm,
						cm : cm,
						store : roleStore,
						loadMask : true,
						loadMask : {
							msg : '正在加载数据...'
						},
						bbar : new Ext.PagingToolbar({
									pageSize : pageSize,
									store : roleStore,
									displayInfo : true,
									dispalyMsg : '显示第{0}条到{1}条记录，一共{2}条',
									emptyMsg : '没有记录'
								}),
						autoExpandColumn : 2
					});

			// 新增或者编辑角色窗口主体
			var rolewindow = function() {
				return new Ext.Window({
					layout   : 'border',
					id : 'rolewindow',
					modal : true,
					width : 800,
					height : 500,
					closeAction : 'close',
					plain : true,
					buttonAlign : 'center',
					title : '新增角色',
					items : [roleformpanel(), fnresourceGrid()],
					buttons : [{
						text : '保存',
						handler : function() {
							nodeId="";
							if (Ext.getCmp('addRolePanelForm').getForm()
									.isValid()) {
								lastSelectDo();
								var roleId = Ext.getCmp('addRolePanelForm').form
										.findField("role_id");
								document.getElementById("privilegeIds").value = Ext.encode(privilege);
								var urlAdd = "";
								if (roleId.getValue() == '') {
	//								alert(privilege);
									//判断角色名是否重复-开始
									if(fnIsRoleNameDuplicate(document.getElementById("role_name").value)){
										Ext.Msg.alert("错误", "这个角色名已经存在了,请重新输入!");
										return;
									}
									//判断角色名是否重复-结束
									urlAdd = 'roleManagementAction!addRole.action';// 新增角色的action
								} else {
									urlAdd = 'roleManagementAction!updateRole.action';// 更新角色的action
								}
								Ext.getCmp('addRolePanelForm').getForm()
										.submit({
											url : urlAdd,
											success : function(from, action) {
												Ext.Msg.alert('提示', '操作角色失败!');
											},
											failure : function(form, action) {
												reloadResource(0);
												roleStore.load({params:{start:0,limit:20}});
												//roleStore.load();
												Ext.getCmp('rolewindow')
														.close();
											},
											waitMsg : '正在保存数据，稍后...'
										});

							} else {
								Ext.Msg.alert('提示', '请确认信息是否填写完整!');
							}
						}
					}, {
						text : '取消',
						handler : function() {
							nodeId="";
							reloadResource(0);
							Ext.getCmp('rolewindow').close();
						}
					}]
				})
			}
			var roleStatusStore = new Ext.data.Store({
							url: 'roleManagementAction!getRoleStatus.action',
							ajax:true,
							reader : new Ext.data.JsonReader({
								root : 'roleStautsComboData'
							}, [{
										name : 'returnValue',
										mapping : 'returnValue'
									}, {
										name : 'displayText',
										mapping : 'displayText'
									}])
			})
			roleStatusStore.reload();
			// 上方的东西
			var roleformpanel = function() {
				var addRolePanel = new Ext.form.FormPanel({
							frame : true,
							title : '角色信息',
							width:500,
							region : 'west',
							collapsible : true,
							id : 'addRolePanelForm',
							bodyStyle : 'padding:5px 5px 0',
							items : [{
								layout : 'column',
								items : [{
											columnWidth : .0005,
											layout : 'form',
											items : [{
														xtype : 'hidden',
														name : 'role.id',
														id : 'role_id'
													}]
										},{
											columnWidth : .0005,
											layout : 'form',
											items : [{
														xtype : 'hidden',
														name : 'privilegeIds',
														id : 'privilegeIds'
													}]
										}, {
											columnWidth : .5,
											layout : 'form',
											items : [{
														xtype : 'textfield',
														fieldLabel : '角色名',
														name : 'role.name',
														id : 'role_name',
														anchor : '95%',
														allowBlank : false,
														blankText : '角色名称不能为空',
														emptyText : '请输入角色名称'
													}, {
														xtype : 'textarea',
														fieldLabel : '角色描述',
														name : 'role.description',
														id : 'role_description',
														anchor : '95%',
														decimalPrecision : 3,
														allowNegative : false,
														minValue : 0,
														maxValue : 1,
														allowBlank : true
													}]
										}, {
											columnWidth : .5,
											layout : 'form',
											items : [{
												xtype : 'combo',
												fieldLabel : '是否启用',
												editable : false,
												width : 97,
												emptyText : '',
												mode : 'local',
												anchor : '90%',
												//value : '0',
												text : '冻结',
												hiddenName : 'role.disabled',
												id : 'role_disabled',
												allowBlank : false,
												triggerAction : 'all',
												valueField : "returnValue",
												displayField : "displayText",
												store : roleStatusStore
											}]
										}
										,{
											columnWidth :1,
											layout : 'form',
											anchor : '100%',
											items : [resTreePanel() ]
										}
										]
							}]
						});
				return addRolePanel;
			}
			// 下方的东西
			/************************树开始************************ */
			var resTreePanel = function() {
				var root = new Ext.tree.AsyncTreeNode({
					expanded : true
				});

				var treeloader = new Ext.tree.TreeLoader({
					dataUrl : 'roleManagementAction!empty.action'
				});
				var tree = new Ext.tree.TreePanel({
					title : ' 模块 ',
					animCollapse : false,
					autoScroll : true,
					autoDestroy : true,
					root : root,
					width : 470,
					height : 300,
					deferHeight : false,
					rootVisible : false,
					loader : treeloader
				});

				Ext.Ajax.request({
					url : 'roleManagementAction!initializeTree.action',
					method : "post",
					success : function(response, options) {
						var responseTextVale = Ext.util.JSON.decode(response.responseText);
						tree.getRootNode().setText(responseTextVale.root.groupName);
						tree.getRootNode().id = responseTextVale.root.groupCode;
						for(var i =0;i<Ext.util.JSON.decode(responseTextVale.treeListJson.length);i++){
							tree.getRootNode().appendChild(Ext.util.JSON.decode(responseTextVale.treeListJson[i]));
						}
						tree.render();
//						tree.expandAll();
					}
				});
				tree.on("click", function(node, event) {
							//if (node.leaf) {
								if(nodeId==node.id){
									return;
								}else{
									nodeId = node.id;
									reloadResource(node.id);
								}
							//}
						});
				return tree;
			}
			/** *********************树结束************************ */
			/** *********************下面右边的开始***************** */
			sroleStore = new Ext.data.Store({
						url : 'roleManagementAction!getResourceById.action',
						method: 'post',
						reader : new Ext.data.JsonReader({
									totalProperty : 'result.totalCount',
									root : 'result.result',
									id : 'id'
								}, [{
											name : 'id',
											mapping : 'id'
										}, {
											name : 'displayName',
											mapping : 'displayName'
										}])
				});
			
			var fnresourceGrid = function() {
				var resourceCM = new Ext.grid.ColumnModel([
						new Ext.grid.RowNumberer(),
						resource_sm,
						{
							header : " 资源名 ",
							width : 236,
							dataIndex : "displayName"
						}]);
				resourceGrid = new Ext.grid.GridPanel({
							title : " 权限 ",
							height : 200,
							width : 800,
							region : 'center',
							cm : resourceCM,
							sm : resource_sm,
							store : sroleStore,
							autoExpandColumn : false
						});

				return resourceGrid;
			}
			/** *********************下面右边的结束***************** */
			roleGrid.render(Ext.getBody());
			roleStore.reload();
		});